<template>
  <view class="other-bpx">
    <view class="information">
      <view class="information-left">
        <view class="information-left-title">{{ agencyData.name }}</view>
        <view v-if="agencyData.address" class="information-left-box">
          <view class="information-left-box-img">
            <image class="information-left-box-img-img" src="/static/agency/location.png" mode="widthFix"></image>
          </view>
          <view class="information-left-box-title">地址：{{ getFullAddress() }}</view>
        </view>
        <view v-if="agencyData.tel" class="information-left-box">
          <view class="information-left-box-img">
            <image class="information-left-box-img-img" src="/static/agency/phone.png" mode="widthFix"></image>
          </view>
          <view class="information-left-box-title">电话：{{ agencyData.tel }}</view>
        </view>
        <view class="information-left-box" v-if="agencyData.area">
          <view class="information-left-box-img">
            <image class="information-left-box-img-img" src="/static/agency/square-meter.png" mode="widthFix"></image>
          </view>
          <view class="information-left-box-title">平米数：{{ agencyData.area }}平米</view>
        </view>
        <view class="information-left-box" v-if="agencyData.roomCount">
          <view  class="information-left-box-img">
            <image class="information-left-box-img-img" src="/static/agency/furniture.png" mode="widthFix"></image>
          </view>
          <view class="information-left-box-title">咨询室数量：{{ agencyData.roomCount }}</view>
        </view>
        <view v-if="agencyData.openstart" class="information-left-box">
          <view class="information-left-box-img">
            <image class="information-left-box-img-img" src="/static/agency/business.png" mode="widthFix"></image>
          </view>
          <view class="information-left-box-title">营业时间：{{agencyData.cycle}}</view>
        </view>
		<view v-if="agencyData.openstart" class="information-left-box">
			<view class="information-left-box-img">
			  <image class="information-left-box-img-img" src="/static/agency/clock.png" mode="widthFix"></image>
			</view>
		   <view class="information-left-box-title">{{ agencyData.openstart }} -{{agencyData.openend}}开放</view>
		</view>
      </view>
      <view class="information-right">
        <view class="information-right-img" @click="handleShareClick">
          <image class="information-right-img-img" src="/static/agency/share.png" mode="widthFix"></image>
        </view>
        <view class="information-right-img" @click="handleCall">
          <image class="information-right-img-img" src="/static/agency/tele.png" mode="widthFix"></image>
        </view>
        <view class="information-right-img" @click="handleMap">
          <image class="information-right-img-img" src="/static/agency/map.png" mode="widthFix"></image>
        </view>
      </view>
    </view>
  </view>
</template>

<script>
import { getAgencDetails } from '@/api/api.js';
import locationManager from '../../utils/location.js';
export default {
  name: 'agencyInfo',
  props: {
    agencyId: {
      type: [String, Number],
      required: true
    },
    defaultData: {
      type: Object,
      default: function() {
        return {
        }
      }
    }
  },
  data: function() {
    return {
      agencyData: {}
    }
  },
  mounted: function() {
    this.loadAgencyInfo();
  },
  watch: {
    agencyId: {
      handler: function(newId) {
        if (newId) {
          this.loadAgencyInfo();
        }
      },
      immediate: true
    }
  },
  methods: {
    // 获取完整地址，包括正确顺序的省市区和详细地址
    getFullAddress: function() {
      const { province, city, county, address } = this.agencyData;
      let fullAddress = '';
      
      // 按正确的顺序拼接省市区，跳过为空的部分
      if (province) fullAddress += province;
      if (city) fullAddress += city;
      if (county) fullAddress += county;
      if (address) fullAddress += address;
      
      return fullAddress;
    },
    loadAgencyInfo: async function() {
      try {
        console.log('加载机构信息，ID:', this.agencyId);
        
        // 先尝试从全局存储中获取数据
        const cachedInsData = uni.getStorageSync('currentInsData');
        
        if (cachedInsData && cachedInsData.id === this.agencyId) {
          // console.log('✅ 从缓存获取机构信息成功');
          this.agencyData = cachedInsData;
        } else {
          // 如果缓存中没有数据或数据不匹配，则调用API获取机构信息
          // console.log('🔍 缓存中无匹配数据，调用API获取');
          const res = await getAgencDetails(this.agencyId);
          // console.log('✅ 调用API获取机构信息成功:', res);
          this.agencyData = res
        }
        
        this.$emit('load-complete', this.agencyData);
      } catch (error) {
        // console.error('❌ 加载机构信息失败:', error);
        this.agencyData = {
          ...this.defaultData
        };
        this.$emit('load-error', error);
      }
    },
    handleShare: function() {
      this.$emit('share', this.agencyData);
      uni.share({
        title: this.agencyData.name,
        path: '/pages/agency/insdetails?id=' + this.agencyId,
        imageUrl: 'https://iepsy.oss-cn-beijing.aliyuncs.com/'+this.agencyData.logo
      });
    },
    handleShareClick: function() {
      uni.showActionSheet({
        itemList: ['分享给朋友', '分享到朋友圈'],
        itemColor: '#000000',
        success: function(res) {
          console.log('分享选项点击:', res.tapIndex);
          if (res.tapIndex === 0) {
            this.$emit('share', 'appMessage', this.agencyId);
          } else if (res.tapIndex === 1) {
            this.$emit('share', 'timeline', this.agencyId);
          }
        }.bind(this),
        fail: function(err) {
          // console.log('分享面板弹出失败:', err);
        }
      });
    },
    handleCall: function() {
      if (this.agencyData.tel) {
        this.$emit('call', this.agencyData.tel);
        uni.makePhoneCall({
          phoneNumber: this.agencyData.tel,
          success: function() {
            // console.log('拨打电话成功');
          },
          fail: function(err) {
            // console.error('拨打电话失败:', err);
            uni.showToast({
              title: '拨打电话失败，请重试',
              icon: 'none',
              duration: 2000
            });
          }
        });
      } else {
        uni.showToast({
          title: '未获取到联系电话',
          icon: 'none',
          duration: 2000
        });
      }
    },
    handleMap: function() {
      if (!this.agencyData.address) {
        uni.showToast({
          title: '未获取到地址信息',
          icon: 'none',
          duration: 2000
        });
        return;
      }

      this.$emit('map', this.agencyData.address);

      // 检查地图权限
      uni.getSetting({
        success: (settingRes) => {
          // 有位置权限或未请求过位置权限
          if (!settingRes.authSetting['scope.userLocation']) {
            // 申请位置权限
            uni.authorize({
              scope: 'scope.userLocation',
              success: () => {
                this._openMapNavigation();
              },
              fail: () => {
                // 权限被拒绝，提示用户手动授权
                uni.showModal({
                  title: '需要定位权限',
                  content: '请在手机设置中允许应用获取位置信息，以使用地图导航功能',
                  confirmText: '去设置',
                  success: (modalRes) => {
                    if (modalRes.confirm) {
                      uni.openSetting();
                    }
                  }
                });
              }
            });
          } else {
            // 已有权限，直接打开地图
            this._openMapNavigation();
          }
        },
        fail: () => {
          uni.showToast({
            title: '获取权限设置失败',
            icon: 'none',
            duration: 2000
          });
        }
      });
    },

    // 内部方法：执行地图导航
    async _openMapNavigation() {
      // 优先使用存储在Token中的经纬度数据
      let latitude = null;
      let longitude = null;
      const fullAddress = this.getFullAddress();

      try {
        // 1. 最高优先级：从locationManager获取缓存的定位信息
        const cachedLocation = locationManager.getCachedLocation();
        if (cachedLocation && cachedLocation.latitude && cachedLocation.longitude) {
          latitude = parseFloat(cachedLocation.latitude);
          longitude = parseFloat(cachedLocation.longitude);
          console.log('✅ 从locationManager获取缓存的定位信息成功:', {latitude, longitude});
        } else {
          console.log('🔍 locationManager中没有有效的缓存定位信息');
          
          // 2. 第二优先级：从全局App实例获取
          const appInstance = getApp();
          if (appInstance && appInstance.globalData) {
            latitude = appInstance.globalData.latitude ? parseFloat(appInstance.globalData.latitude) : null;
            longitude = appInstance.globalData.longitude ? parseFloat(appInstance.globalData.longitude) : null;
            if (latitude && longitude) {
              console.log('✅ 从全局App实例获取定位信息成功:', {latitude, longitude});
            }
          }
          
          // 3. 第三优先级：从本地存储获取
          if (!latitude || !longitude) {
            const globalLatitude = uni.getStorageSync('latitude');
            const globalLongitude = uni.getStorageSync('longitude');
            latitude = globalLatitude ? parseFloat(globalLatitude) : null;
            longitude = globalLongitude ? parseFloat(globalLongitude) : null;
            if (latitude && longitude) {
              console.log('✅ 从本地存储获取定位信息成功:', {latitude, longitude});
            }
          }
          
          // 4. 最低优先级：回退到agencyData中的坐标
          if (!latitude || !longitude) {
            latitude = this.agencyData.latitude ? parseFloat(this.agencyData.latitude) : null;
            longitude = this.agencyData.longitude ? parseFloat(this.agencyData.longitude) : null;
            if (latitude && longitude) {
              console.log('✅ 从agencyData获取定位信息成功:', {latitude, longitude});
            }
          }
        }

        // 记录获取到的经纬度数据和来源
        console.log('最终使用的经纬度数据:', {latitude, longitude});

        // 检查经纬度是否为有效数值且在合理地理范围内
        // 纬度范围: -90 到 90
        // 经度范围: -180 到 180
        const isValidLatitude = latitude !== null && !isNaN(latitude) && latitude >= -90 && latitude <= 90;
        const isValidLongitude = longitude !== null && !isNaN(longitude) && longitude >= -180 && longitude <= 180;
        
        if (!isValidLatitude || !isValidLongitude) {
          console.warn('经纬度不在有效范围内，使用地址模糊定位');
          // 如果经纬度无效或不在合理范围内，使用北京作为默认位置
          // 避免定位到非洲海洋区域
          latitude = 39.9042; // 北京纬度
          longitude = 116.4074; // 北京经度
          console.log('⚠️ 使用默认位置(北京)作为定位坐标');
          
          // 使用地址进行模糊定位
          uni.openLocation({
            latitude: latitude,
            longitude: longitude,
            name: this.agencyData.name || '',
            address: fullAddress,
            success: function() {
              // console.log('打开地图成功');
            },
            fail: function(err) {
              console.error('打开地图失败(地址定位):', err);
              this._showMapError(err);
            }.bind(this)
          });
        } else {
          console.log('使用精确经纬度定位:', {latitude, longitude});
          // 使用精确经纬度定位
          uni.openLocation({
            latitude: latitude,
            longitude: longitude,
            name: this.agencyData.name || '',
            address: fullAddress,
            scale: 18, // 提高缩放级别以获得更精确的定位
            success: function() {
              // console.log('打开地图成功');
            },
            fail: function(err) {
              console.error('打开地图失败(经纬度定位):', err);
              this._showMapError(err);
            }.bind(this)
          });
        }
      } catch (error) {
        console.error('地图功能异常:', error);
        uni.showToast({
          title: '地图功能异常，请稍后重试',
          icon: 'none',
          duration: 2500
        });
      }
    },

    // 显示地图错误信息
    _showMapError: function(err) {
      let errorMsg = '打开地图失败，请重试';
      
      if (err.errMsg) {
        if (err.errMsg.includes('auth deny')) {
          errorMsg = '请授权地图权限后重试';
        } else if (err.errMsg.includes('fail')) {
          errorMsg = '地图服务暂时不可用，请稍后再试';
        }
      }
      
      uni.showToast({
        title: errorMsg,
        icon: 'none',
        duration: 2500
      });
    }
  }
};
</script>

<style scoped>
.other-bpx {
  width: 750rpx;
  height: 620rpx;
  padding: 0rpx 15rpx;
}

.information {
  width: 725rpx;
  background-color: #fff;
  border-radius: 25rpx;
  transform: translateY(-80rpx);
  display: flex;
  overflow: hidden;
  padding: 25rpx;
  box-sizing: border-box;
}

.information-left {
  width: 620rpx;
  height: 100%;
}

.information-right {
  width: 100rpx;
  padding: 20rpx 30rpx;
  display: flex;
  flex-direction: column;
  box-sizing: border-box;
}

.information-left-title {
  font-size: 35rpx;
  padding: 5rpx;
  color: black;
  padding: 20rpx 10rpx;
  font-weight: 600;
}

.information-left-box {
  width: 100%;
  display: flex;
  padding: 30rpx 0rpx;
}

.information-left-box-img {
  width: 40rpx;
  height: 40rpx;
  padding-right: 15rpx;
}

.information-left-box-img-img-padding {
  padding: 20rpx 10rpx 0rpx 0rpx;
}

.information-left-box-img-img {
  width: 40rpx;
  height: 100%;
}

.information-right-img {
  width: 60rpx;
  height: 33.33%;
  display: flex;
  justify-content: center;
  align-items: center;
}

.information-right-img-img {
  width: 60rpx;
  height: 60rpx;
}
</style>